<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>

        // 1、
        function fn(name) {
            this.name = name;
        }

        // 通过new关键字来调用的，那么这种方式就是构造函数调用
        // 那么函数内部的this就是构造函数的实例
        var _fn = new fn("小明");


        // 2、
        function jQuery() {
            return new jQuery.prototype.init();
        }

        jQuery.prototype = {
            constructor: jQuery,
            length:100,
            init: function() {
                // this指向init构造函数的实例
                // 首先检查本身有无length属性
                // 如果本身没有length属性，那么就回去它的原型对象中查找
                // 如果原型对象中没有length，就去原型对象的原型对象中查找
                // 一直找到根原型对象 Object.prototype
                // 最终没有找到的话，就认为该对象没有length属性，length属性的值就是默认值：undefined
                console.log(this.length) // ? 100
            }
        }

        // 修改了 init函数的默认原型，指向新原型
        jQuery.prototype.init.prototype = jQuery.prototype;

        jQuery();
    </script>
</body>
</html>